home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 April: Mac OS SDK / Dev.CD Apr 96 SDK / Dev.CD Apr 96 SDK1.toast / Development Kits (Disc 1) / OpenDoc Development Framework / ODFDev / ODF / Framewrk / FWPart / Sources / FWProxy.cpp < prev    next >
Encoding:
Text File  |  1995-11-08  |  19.8 KB  |  658 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                FRProxy.cpp
  4. //    Release Version:    $ 1.0d11 $
  5. //
  6. //    Copyright:    © 1995 by Apple Computer, Inc., all rights reserved.
  7. //
  8. //========================================================================================
  9.  
  10. #include "FWFrameW.hpp"
  11.  
  12. #ifndef FWPROXY_H
  13. #include "FWProxy.h"
  14. #endif
  15.  
  16. #ifndef FWPARTNG_H
  17. #include "FWPartng.h"
  18. #endif
  19.  
  20. #ifndef FWFRMING_H
  21. #include "FWFrming.h"
  22. #endif
  23.  
  24. #ifndef FWUTIL_H
  25. #include "FWUtil.h"
  26. #endif
  27.  
  28. #ifndef FWITERS_H
  29. #include "FWIters.h"
  30. #endif
  31.  
  32. #ifndef FWPXYFRM_H
  33. #include "FWPxyFrm.h"
  34. #endif
  35.  
  36. #ifndef FWPRESEN_H
  37. #include "FWPresen.h"
  38. #endif
  39.  
  40. #ifndef FWCLNINF_H
  41. #include "FWClnInf.h"
  42. #endif
  43.  
  44. // ----- Graphic Includes -----
  45.  
  46. #ifndef FWPOINT_H
  47. #include "FWPoint.h"
  48. #endif
  49.  
  50. #ifndef FWODGEOM_H
  51. #include "FWODGeom.h"
  52. #endif
  53.  
  54. // ----- ODF Foundation Includes -----
  55.  
  56. #ifndef FWDEBUG_H
  57. #include "FWDebug.h"
  58. #endif
  59.  
  60. #ifndef FWBARRAY_H
  61. #include "FWBArray.h"
  62. #endif
  63.  
  64. // ----- ODUtil Includes -----
  65.  
  66. #ifndef FWORDCOL_H
  67. #include "FWOrdCol.h"
  68. #endif
  69.  
  70. // ----- OpenDoc Includes -----
  71.  
  72. #ifndef SOM_Module_OpenDoc_StdProps_defined
  73. #include <StdProps.xh>
  74. #endif
  75.  
  76. #ifndef SOM_Module_OpenDoc_StdTypes_defined
  77. #include <StdTypes.xh>
  78. #endif
  79.  
  80. #ifndef SOM_ODShape_xh
  81. #include <Shape.xh>
  82. #endif
  83.  
  84. #ifndef SOM_ODTransform_xh
  85. #include <Trnsform.xh>
  86. #endif
  87.  
  88. #ifndef SOM_ODWindow_xh
  89. #include <Window.xh>
  90. #endif
  91.  
  92. #ifndef SOM_ODFrame_xh
  93. #include <Frame.xh>
  94. #endif
  95.  
  96. #ifndef SOM_ODStorageUnit_xh
  97. #include <StorageU.xh>
  98. #endif
  99.  
  100. #ifndef SOM_ODStorageUnitView_xh
  101. #include <SUView.xh>
  102. #endif
  103.  
  104. #ifndef SOM_ODPart_xh
  105. #include <Part.xh>
  106. #endif
  107.  
  108. #ifndef SOM_ODFacet_xh
  109. #include <Facet.xh>
  110. #endif
  111.  
  112. #ifndef SOM_ODDraft_xh
  113. #include <Draft.xh>
  114. #endif
  115.  
  116. //========================================================================================
  117. //    Runtime Info
  118. //========================================================================================
  119.  
  120. #if FW_LIB_EXPORT_PRAGMAS
  121. #pragma lib_export on
  122. #endif
  123.  
  124. #ifdef FW_BUILD_MAC
  125. #pragma segment fw_embedding
  126. #endif
  127.  
  128. FW_DEFINE_CLASS_M0(FW_MProxy)
  129.  
  130. //========================================================================================
  131. //    class FW_MProxy
  132. //========================================================================================
  133.  
  134. //----------------------------------------------------------------------------------------
  135. //    FW_MProxy::FW_MProxy
  136. //----------------------------------------------------------------------------------------
  137.  
  138. FW_MProxy::FW_MProxy(Environment* ev, FW_CEmbeddingPart* part, FW_CPresentation* presentation) :
  139.     fPart(part),
  140.     fPresentation(presentation),
  141.     fProxyFrames(NULL),
  142.     fClonedFrameID(kODNULLID),
  143.     fEmbeddedFacetCount(0),
  144.     fSelected(FALSE)
  145. {
  146.     FW_ASSERT(fPart != NULL);
  147.     FW_ASSERT(fPresentation != NULL);
  148.     
  149.     fProxyFrames = new FW_CPrivOrderedCollection;
  150. }
  151.  
  152. //----------------------------------------------------------------------------------------
  153. //    FW_MProxy::~FW_MProxy
  154. //----------------------------------------------------------------------------------------
  155.  
  156. FW_MProxy::~FW_MProxy()
  157. {
  158.     if (fProxyFrames)
  159.     {
  160.         Environment* ev = somGetGlobalEnvironment();
  161.         
  162.         FW_CProxyFrame* proxyFrame;
  163.         while ((proxyFrame = (FW_CProxyFrame*)fProxyFrames->First()) != NULL)
  164.         {
  165.             FW_ASSERT(proxyFrame->GetProxy(ev) == this);
  166.             proxyFrame->SetProxy(ev, NULL);
  167.             PrivRemoveProxyFrame(ev, proxyFrame);    // Will delete it if I am the last one to hold on it
  168.         }
  169.             
  170.         delete fProxyFrames;
  171.         fProxyFrames = NULL;
  172.     }
  173. }
  174.  
  175. //----------------------------------------------------------------------------------------
  176. //     FW_MProxy::UsedShapeChanged
  177. //----------------------------------------------------------------------------------------
  178. //    The used shape of one of my embedded frame has changed
  179.  
  180. void FW_MProxy::UsedShapeChanged(Environment *ev, 
  181.                                     FW_CEmbeddingFrame* embeddingFrame,
  182.                                     ODFrame* odEmbeddedFrame)
  183. {
  184. FW_UNUSED(ev);
  185. FW_UNUSED(embeddingFrame);
  186. FW_UNUSED(odEmbeddedFrame);
  187. }
  188.  
  189. //----------------------------------------------------------------------------------------
  190. //    FW_MProxy::FrameShapeRequested
  191. //----------------------------------------------------------------------------------------
  192.  
  193. ODShape* FW_MProxy::FrameShapeRequested(Environment* ev, 
  194.                                         ODFrame* odEmbeddedFrame, 
  195.                                         ODShape* frameShape)
  196. {
  197. FW_UNUSED(odEmbeddedFrame);
  198.  
  199.     frameShape->Acquire(ev);
  200.     return frameShape;
  201. }
  202.  
  203. //----------------------------------------------------------------------------------------
  204. //    FW_MProxy::AttachEmbeddedFrames
  205. //----------------------------------------------------------------------------------------
  206.  
  207. void FW_MProxy::AttachEmbeddedFrames(Environment *ev)
  208. {
  209.     FW_CProxyProxyFrameIterator ite(this);
  210.     for (FW_CProxyFrame* proxyFrame = ite.First(); ite.IsNotComplete(); proxyFrame = ite.Next())
  211.     {
  212.         proxyFrame->PrivAttach(ev);
  213.     }
  214. }
  215.  
  216. //----------------------------------------------------------------------------------------
  217. //    FW_MProxy::DetachEmbeddedFrames
  218. //----------------------------------------------------------------------------------------
  219. //    At the end proxyFrames are only owned by the proxy
  220.  
  221. void FW_MProxy::DetachEmbeddedFrames(Environment *ev)
  222. {
  223.     FW_CProxyProxyFrameIterator ite(this);
  224.     for (FW_CProxyFrame* proxyFrame = ite.First(); ite.IsNotComplete(); proxyFrame = ite.Next())
  225.     {
  226.         proxyFrame->PrivDetach(ev);
  227.     }
  228. }
  229.  
  230. //----------------------------------------------------------------------------------------
  231. //    FW_MProxy::RemoveEmbeddedFrames
  232. //----------------------------------------------------------------------------------------
  233. //    At the end this proxy doesn't have any proxyframes
  234. //    Attention: Use DetachEmbeddedFrames if you are supporting Undo
  235.  
  236. void FW_MProxy::RemoveEmbeddedFrames(Environment *ev)
  237. {
  238.     // ----- First detach them
  239.     DetachEmbeddedFrames(ev);
  240.     
  241.     // ----- Remove all the embedded frames -----
  242.     FW_CProxyFrame* proxyFrame ;
  243.     while ((proxyFrame = (FW_CProxyFrame*)fProxyFrames->First()) != NULL)
  244.     {
  245.         long refCount = PrivRemoveProxyFrame(ev, proxyFrame);
  246.         FW_ASSERT(refCount == 0);
  247.     }    
  248. }
  249.  
  250. //----------------------------------------------------------------------------------------
  251. //    FW_MProxy::PrivRemoveProxyFrame
  252. //----------------------------------------------------------------------------------------
  253.  
  254. long FW_MProxy::PrivRemoveProxyFrame(Environment* ev, FW_CProxyFrame* proxyFrame)
  255. {    
  256.     fProxyFrames->Remove(proxyFrame);
  257.     proxyFrame->SetProxy(ev, NULL);
  258.     return proxyFrame->Release();
  259. }
  260.  
  261. //----------------------------------------------------------------------------------------
  262. //    FW_MProxy::PrivAcquireProxyFrame
  263. //----------------------------------------------------------------------------------------
  264.  
  265. FW_CProxyFrame* FW_MProxy::PrivAcquireProxyFrame(Environment* ev, ODStorageUnitID frameID) const
  266. {
  267.     return FW_CProxyFrame::PrivAcquireProxyFrame(ev, fProxyFrames, frameID);
  268. }
  269.  
  270. //----------------------------------------------------------------------------------------
  271. //    FW_MProxy::GetEmbeddedFacetUnderMouse
  272. //----------------------------------------------------------------------------------------
  273. // 'mouse' in Frame coordinate system
  274.  
  275. ODFacet* FW_MProxy::GetEmbeddedFacetUnderMouse(Environment* ev, ODFacet* embeddingFacet, const FW_CPoint& mouse) const
  276. {    
  277.     ODPoint odMouse = mouse;
  278.  
  279.     FW_CEmbeddedODFacetsIterator ite(ev, this, embeddingFacet, kODFrontToBack);
  280.     for (ODFacet* odFacet = ite.First(ev); ite.IsNotComplete(ev); odFacet = ite.Next(ev))
  281.     {
  282.         if (odFacet->ContainsPoint(ev, &odMouse, NULL))
  283.             return odFacet;
  284.     }
  285.     
  286.     return NULL;
  287. }
  288.  
  289. //----------------------------------------------------------------------------------------
  290. //    FW_MProxy::SetSelectState
  291. //----------------------------------------------------------------------------------------
  292.  
  293. void FW_MProxy::SetSelectState(Environment* ev, FW_Boolean state)
  294. {
  295.     fSelected = state;
  296.     
  297.     // ----- Set the selected flag in facet -----
  298.     FW_CProxyEmbeddedFrameIterator ite(ev, this);
  299.     for (ODFrame* odEmbeddedFrame = ite.First(ev); ite.IsNotComplete(ev); odEmbeddedFrame = ite.Next(ev))
  300.     {
  301.         FW_CODFrameFacetIterator ite2(ev, odEmbeddedFrame);
  302.         for (ODFacet* facet = ite2.First(ev); ite2.IsNotComplete(ev); facet = ite2.Next(ev))
  303.             facet->SetSelected(ev, state);
  304.     }
  305. }
  306.  
  307. //----------------------------------------------------------------------------------------
  308. //    FW_MProxy::GetEmbeddedPart
  309. //----------------------------------------------------------------------------------------
  310.  
  311. ODPart* FW_MProxy::GetEmbeddedPart(Environment* ev) const
  312. {
  313.     // Can't be called when empty because proxys are automtically deleted
  314.     FW_ASSERT(fProxyFrames->Count() != 0);
  315.     
  316.     FW_CProxyFrame* proxyFrame = (FW_CProxyFrame*)fProxyFrames->First();
  317.     
  318.     FW_CAcquiredODPart aqODPart = proxyFrame->GetFrame(ev)->AcquirePart(ev);
  319.     return aqODPart;
  320. }
  321.  
  322. //----------------------------------------------------------------------------------------
  323. //    FW_MProxy::AcquireProxyFrame
  324. //----------------------------------------------------------------------------------------
  325. //    Acquire a proxyframe knowing its embedding frame
  326.  
  327. FW_CProxyFrame* FW_MProxy::AcquireProxyFrame(Environment* ev, FW_CEmbeddingFrame* embeddingFrame) const
  328. {
  329.     FW_CProxyProxyFrameIterator ite(this);
  330.     for (FW_CProxyFrame* proxyFrame = ite.First(); ite.IsNotComplete(); proxyFrame = ite.Next())
  331.     {
  332.         if (proxyFrame->GetContainingFrame(ev) == embeddingFrame)
  333.         {
  334.             proxyFrame->Acquire();
  335.             return proxyFrame;
  336.         }
  337.     }
  338.     return NULL;
  339. }
  340.  
  341. //----------------------------------------------------------------------------------------
  342. //    FW_MProxy::GetEmbeddedFrame
  343. //----------------------------------------------------------------------------------------
  344. //    returns the embedded frame of this proxy (embedded) frame
  345.  
  346. ODFrame* FW_MProxy::GetEmbeddedFrame(Environment* ev, FW_CEmbeddingFrame* embeddingFrame) const
  347. {
  348.     FW_CAcquiredProxyFrame aqProxyFrame = AcquireProxyFrame(ev, embeddingFrame);
  349.     return ((const void*)aqProxyFrame == NULL) ? NULL : aqProxyFrame->GetFrame(ev);
  350. }
  351.  
  352. //----------------------------------------------------------------------------------------
  353. //    FW_MProxy::IsEmbeddedFrame
  354. //----------------------------------------------------------------------------------------
  355. //    returns true if the embeddedframe belongs to this proxy
  356.  
  357. FW_Boolean FW_MProxy::IsEmbeddedFrame(Environment* ev, ODFrame* embeddedFrame) const
  358. {
  359.     ODID frameID = embeddedFrame->GetID(ev);
  360.     FW_CProxyProxyFrameIterator ite(this);
  361.     for (FW_CProxyFrame* proxyFrame = ite.First(); ite.IsNotComplete(); proxyFrame = ite.Next())
  362.     {
  363.         if (proxyFrame->GetFrameID(ev) == frameID)
  364.             return TRUE;
  365.     }
  366.     
  367.     return FALSE;
  368. }
  369.  
  370. //----------------------------------------------------------------------------------------
  371. //    FW_MProxy::Externalize
  372. //----------------------------------------------------------------------------------------
  373.  
  374. void FW_MProxy::Externalize(Environment* ev, 
  375.                             ODStorageUnitView* destinationSUView, 
  376.                             FW_CCloneInfo* cloneInfo)
  377. {
  378.     FW_CFrame* scopeFrame = cloneInfo->GetScopeFrame(ev);
  379.     
  380.     if (cloneInfo != NULL && scopeFrame != NULL)
  381.     {
  382.         unsigned long count = 1;
  383.         FW_CByteArray byteArray(&count, sizeof(unsigned long));
  384.         destinationSUView->SetValue(ev, byteArray);
  385.     
  386. #ifdef FW_DEBUG
  387.         FW_CEmbeddingFrame* scopeEmbeddingFrame = FW_DYNAMIC_CAST(FW_CEmbeddingFrame, scopeFrame);
  388.         FW_ASSERT(scopeEmbeddingFrame);
  389.         FW_CAcquiredProxyFrame aqProxyFrame = AcquireProxyFrame(ev, scopeEmbeddingFrame);
  390. #else
  391.         FW_CAcquiredProxyFrame aqProxyFrame = AcquireProxyFrame(ev, (FW_CEmbeddingFrame*)scopeFrame);
  392. #endif
  393.         FW_ASSERT((const void*)aqProxyFrame != NULL);
  394.         
  395.         FW_Boolean result = aqProxyFrame->ExternalizeProxyFrame(ev, destinationSUView, cloneInfo);
  396.         FW_ASSERT(result = TRUE);
  397.     }
  398.     else
  399.     {
  400.         FW_CProxyFrame* proxyFrame;
  401.         unsigned long count = 0;
  402.         
  403.         // Count only the proxyFrame with a containing frame persistent
  404.         FW_CProxyProxyFrameIterator ite(this);
  405.         for (proxyFrame = ite.First(); ite.IsNotComplete(); proxyFrame = ite.Next())
  406.         {
  407.             if (proxyFrame->GetContainingFrame(ev)->IsPersistent(ev))
  408.                 count++;
  409.         }
  410.             
  411.         // ----- Save the count -----
  412.         FW_CByteArray byteArray(&count, sizeof(unsigned long));
  413.         destinationSUView->SetValue(ev, byteArray);
  414.         
  415.         // ----- Externalize each proxy -----
  416.         FW_CProxyProxyFrameIterator ite2(this);
  417.         for (proxyFrame = ite2.First(); ite2.IsNotComplete(); proxyFrame = ite2.Next())
  418.         {
  419.             FW_Boolean result = proxyFrame->ExternalizeProxyFrame(ev, destinationSUView, cloneInfo);
  420.             FW_ASSERT(result = TRUE);
  421.         }
  422.     }
  423. }
  424.  
  425. //----------------------------------------------------------------------------------------
  426. //    FW_MProxy::PrivPostClone
  427. //----------------------------------------------------------------------------------------
  428.  
  429. void FW_MProxy::PrivPostClone(Environment* ev, FW_CFrame* scopeFrame)
  430. {
  431.     if (fClonedFrameID == kODNULLID)
  432.         return;
  433.     
  434.     ODDraft* myDraft = GetPart(ev)->GetStorageUnit(ev)->GetDraft(ev);
  435.             
  436.     // ----- Get the new frame from my draft -----
  437.     FW_CAcquiredODFrame aqODEmbeddedFrame = myDraft->AcquireFrame(ev, fClonedFrameID);
  438.     FW_ASSERT(aqODEmbeddedFrame != NULL);
  439.     
  440.     // ----- Set the containing frame
  441.     aqODEmbeddedFrame->SetContainingFrame(ev, scopeFrame->GetODFrame(ev));
  442.  
  443.     // ----- Now we can embed it -----    
  444.     FW_CAcquiredODShape aqFrameShape = aqODEmbeddedFrame->AcquireFrameShape(ev, NULL);
  445.     FW_CAcquiredODPart aqODPart = aqODEmbeddedFrame->AcquirePart(ev);
  446.     fPresentation->Embed(ev, 
  447.                         aqODPart,
  448.                         aqODEmbeddedFrame,
  449.                         this,     
  450.                         aqFrameShape,
  451.                         aqODEmbeddedFrame->GetViewType(ev),
  452.                         aqODEmbeddedFrame->GetPresentation(ev),
  453.                         aqODEmbeddedFrame->GetFrameGroup(ev),
  454.                         aqODEmbeddedFrame->IsSubframe(ev));
  455.  
  456.     // ----- Cloning done -----
  457.     fClonedFrameID = kODNULLID;
  458. }
  459.  
  460. //----------------------------------------------------------------------------------------
  461. //    FW_MProxy::Internalize
  462. //----------------------------------------------------------------------------------------
  463.  
  464. void FW_MProxy::Internalize(Environment* ev, 
  465.                             ODStorageUnitView* sourceSUView,
  466.                             FW_CCloneInfo *cloneInfo)
  467. {
  468.     if (cloneInfo != NULL)
  469.     {
  470.         FW_ASSERT(cloneInfo->GetScopeFrame(ev));
  471.         
  472.         if (cloneInfo->fClonedProxyList == NULL)
  473.             cloneInfo->fClonedProxyList = new FW_CPrivOrderedCollection;
  474.         
  475.         cloneInfo->fClonedProxyList->AddLast(this);
  476.         
  477.         // ----- Read the number of embedded frames -----
  478.         unsigned long count;
  479.         FW_CByteArray byteArray;     
  480.         sourceSUView->GetValue(ev, sizeof(unsigned long), byteArray);
  481.         byteArray.CopyBuffer(&count, sizeof(unsigned long));
  482.     
  483.         FW_ASSERT(count == 1);        // if clone we should have only one embedded frame
  484.     
  485.         ODStorageUnitRef aSURef;
  486.         sourceSUView->GetValue(ev, sizeof(ODStorageUnitRef), byteArray);
  487.         byteArray.CopyBuffer(&aSURef, sizeof(ODStorageUnitRef));
  488.         
  489.         FW_ASSERT(sourceSUView->IsValidStorageUnitRef(ev, aSURef));
  490.     
  491.         ODStorageUnitID fromFrameID = sourceSUView->GetIDFromStorageUnitRef(ev, aSURef);
  492.         fClonedFrameID = cloneInfo->Clone(ev, fromFrameID, 0, 0);
  493.     }
  494.     else
  495.     {
  496.         unsigned long count;
  497.         
  498.         FW_CByteArray byteArray;     
  499.         sourceSUView->GetValue(ev, sizeof(unsigned long), byteArray);
  500.         byteArray.CopyBuffer(&count, sizeof(unsigned long));
  501.             
  502.         for (unsigned long i = 0; i<count; i++)
  503.         {
  504.             ODStorageUnitRef aSURef;
  505.             sourceSUView->GetValue(ev, sizeof(ODStorageUnitRef), byteArray);
  506.             byteArray.CopyBuffer(&aSURef, sizeof(ODStorageUnitRef));
  507.             
  508.             if (sourceSUView->IsValidStorageUnitRef(ev, aSURef))
  509.             {
  510.                 ODStorageUnitID frameID = sourceSUView->GetIDFromStorageUnitRef(ev, aSURef);
  511.                 
  512.                 // ----- look first if the part has a proxyframe with this Id
  513.                 FW_CAcquiredProxyFrame aqProxyFrame = fPart->PrivAcquireProxyFrame(ev, frameID);
  514.                 
  515.                 // ----- could not find it. Just create one
  516.                 if ((const void*)aqProxyFrame == NULL)
  517.                     aqProxyFrame = new FW_CProxyFrame(ev, fPart, this, frameID);
  518.                 else
  519.                 {
  520.                     aqProxyFrame->SetProxy(ev, this);
  521.                     this->PrivAddProxyFrame(ev, aqProxyFrame);
  522.                 }
  523.             }                                            
  524.         }
  525.     }
  526. }
  527.  
  528. //----------------------------------------------------------------------------------------
  529. //    FW_MProxy::SetEmbeddedFramesViewType
  530. //----------------------------------------------------------------------------------------
  531. //    ATTENTION: I am forcing the embedded frame to be in memory
  532.  
  533. void FW_MProxy::SetEmbeddedFramesViewType(Environment* ev, ODTypeToken viewType)
  534. {
  535.     FW_CProxyProxyFrameIterator ite(this);
  536.     for (FW_CProxyFrame* proxyFrame = ite.First(); ite.IsNotComplete(); proxyFrame = ite.Next())
  537.     {
  538.         proxyFrame->GetFrame(ev)->SetViewType(ev, viewType);
  539.     }
  540. }
  541.  
  542. //----------------------------------------------------------------------------------------
  543. //    FW_MProxy::ChangeExternalTransforms
  544. //----------------------------------------------------------------------------------------
  545.  
  546. void FW_MProxy::ChangeExternalTransforms(Environment* ev, FW_CFixed x, FW_CFixed y)
  547. {
  548.     if (fEmbeddedFacetCount != 0)
  549.     {
  550.         FW_CAcquiredODTransform transform = ::FW_NewODTransform(ev, FW_CPoint(x, y));
  551.         ChangeExternalTransforms(ev, transform);
  552.     }
  553. }
  554.  
  555. //----------------------------------------------------------------------------------------
  556. //    FW_MProxy::ChangeExternalTransforms
  557. //----------------------------------------------------------------------------------------
  558.  
  559. void FW_MProxy::ChangeExternalTransforms(Environment* ev, ODTransform* transform)
  560. {
  561.     FW_ASSERT(transform);
  562.     
  563.     if (fEmbeddedFacetCount == 0)
  564.         return;
  565.  
  566.     transform->Acquire(ev);
  567.     FW_CAcquiredODTransform aqTransform(transform);
  568.     
  569.     FW_CProxyProxyFrameIterator ite(this);
  570.     for (FW_CProxyFrame* proxyFrame = ite.First(); ite.IsNotComplete(); proxyFrame = ite.Next())
  571.     {
  572.         if (proxyFrame->IsFrameInMemory(ev))
  573.         {
  574.             FW_CAcquiredODTransform aqCopy;
  575.                 
  576.             if (transform == NULL)
  577.                 aqCopy = transform = aqTransform->Copy(ev);
  578.             
  579.             FW_CODFrameFacetIterator ite(ev, proxyFrame->GetFrame(ev));        
  580.             for (ODFacet* odFacet = ite.First(ev); ite.IsNotComplete(ev); odFacet = ite.Next(ev))
  581.             {
  582.                 odFacet->ChangeGeometry(ev, NULL, transform, NULL);
  583.             }    
  584.                             
  585.             transform = NULL;
  586.         }
  587.     }
  588. }
  589.  
  590. //----------------------------------------------------------------------------------------
  591. //    FW_MProxy::ChangeFrameShapes
  592. //----------------------------------------------------------------------------------------
  593.  
  594. void FW_MProxy::ChangeFrameShapes(Environment* ev, FW_CFixed width, FW_CFixed height)
  595. {
  596.     FW_CProxyProxyFrameIterator ite(this);
  597.     for (FW_CProxyFrame* proxyFrame = ite.First(); ite.IsNotComplete(); proxyFrame = ite.Next())
  598.     {
  599.         if (proxyFrame->IsFrameInMemory(ev))
  600.         {
  601.             FW_CAcquiredODShape newFrameShape = ::FW_NewODShape(ev, FW_CRect(FW_kZeroPoint, width, height));
  602.             proxyFrame->GetFrame(ev)->ChangeFrameShape(ev, newFrameShape, NULL);
  603.         }
  604.     }
  605. }
  606.  
  607. //----------------------------------------------------------------------------------------
  608. //    FW_MProxy::ChangeFrameShapes
  609. //----------------------------------------------------------------------------------------
  610.  
  611. void FW_MProxy::ChangeFrameShapes(Environment* ev, ODShape* newShape)
  612. {
  613.     FW_ASSERT(newShape != NULL);
  614.     
  615.     FW_CProxyProxyFrameIterator ite(this);
  616.     for (FW_CProxyFrame* proxyFrame = ite.First(); ite.IsNotComplete(); proxyFrame = ite.Next())
  617.     {
  618.         if (proxyFrame->IsFrameInMemory(ev))
  619.         {
  620.             FW_CAcquiredODShape aqShape(newShape->Copy(ev));
  621.             proxyFrame->GetFrame(ev)->ChangeFrameShape(ev, aqShape, NULL);
  622.         }
  623.     }
  624. }
  625.  
  626. //----------------------------------------------------------------------------------------
  627. //    FW_MProxy::PrivAddProxyFrame
  628. //----------------------------------------------------------------------------------------
  629.  
  630. void FW_MProxy::PrivAddProxyFrame(Environment* ev, FW_CProxyFrame* proxyFrame)
  631. {        
  632. #ifdef FW_DEBUG
  633.     FW_CProxyProxyFrameIterator ite(this);
  634.     for (FW_CProxyFrame* pf = ite.First(); ite.IsNotComplete(); pf = ite.Next())
  635.     {
  636.         if (pf == proxyFrame)
  637.             FW_DEBUG_MESSAGE("FW_MProxy::PrivAddProxyFrame ProxyFrame already attached");
  638.     }
  639. #endif
  640.  
  641.     FW_ASSERT(proxyFrame->GetProxy(ev) == this);
  642.     
  643.     fProxyFrames->AddLast(proxyFrame);
  644.     proxyFrame->Acquire();
  645. }
  646.  
  647. //----------------------------------------------------------------------------------------
  648. //    FW_MProxy::AdjustBorderShape
  649. //----------------------------------------------------------------------------------------
  650. //    Shape is content coordinate and already intersected with the content shape
  651.  
  652. void FW_MProxy::AdjustBorderShape(Environment* ev, 
  653.                                     FW_CEmbeddingFrame* embeddingFrame, 
  654.                                     ODFacet* embeddedFacet, 
  655.                                     ODShape *shape)
  656. {
  657. }
  658.